package com.demo.java.OD601_650.OD613;

import java.util.Scanner;
import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最大N个数与最小N个数的和(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146606071
 */
public class OdMain {
    public static void main(String[] args) {
        // 创建Scanner对象用于输入
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            // 读取第一个整数m，表示数组大小
            int m = in.nextInt();
            int[] nums = new int[m];
            // 读取m个整数并存入数组
            for (int i = 0; i < nums.length; i++) {
                nums[i] = in.nextInt();
            }
            // 读取第二个整数n，表示我们需要计算的最大和最小元素的个数
            int n = in.nextInt();
            // 调用cal函数计算并输出结果
            System.out.println(cal(nums, n));
        }
    }

    // cal函数用于计算最大N个数和最小N个数的和
    public static int cal(int[] nums, int n) {
        // 默认返回-1表示无法计算
        int res = -1;
        // 使用HashSet去重，去掉重复的元素
        Set<Integer> set = new HashSet<>();
        for (int a : nums) {
            set.add(a);
        }
        // 如果去重后的元素不足2N个，无法计算，返回-1
        if (2 * n > set.size()) {
            return res;
        }

        // 将去重后的元素存入数组
        int count = 0;
        for (Integer s : set) {
            nums[count++] = s;
        }
        // 对去重后的数组进行排序
        Arrays.sort(nums, 0, count);
        // 计算最大N个数和最小N个数的和
        res = 0;
        for (int i = 0; i < n; i++) {
            res += nums[i] + nums[count - 1 - i];
        }
        return res;
    }
}